// 文件名：flat_set_keyword_match.cpp
// 目的：使用 std::flat_set 管理命令关键字集合，支持 O(log N) 存在性检查与顺序遍历帮助信息。
// 关键点：
//   - 使用透明比较器 std::less<>，以支持 string_view 的异构 contains/find 而无需分配临时字符串；
//   - contains(cmd)：校验命令是否受支持；
//   - 遍历容器输出所有可用命令（按字典序）。
// 适用性：
//   - REPL/控制台/管理端口等场景的指令集合与快捷校验；
//   - 扩展指令时，若插入频繁则需关注 flat_set 的 O(N) 插入成本（可在初始化阶段一次性构建）。
#include <flat_set>
#include <iostream>
#include <string>
#include <string_view>

int main() {
    // 命令集合（有序、唯一、透明比较）
    std::flat_set<std::string, std::less<>> commands = {
        "connect", "disconnect", "help", "list", "reload", "status", "shutdown"
    };

    // 简易派发：先校验，再执行或打印帮助
    auto dispatch = [&](std::string_view cmd) {
        if (!commands.contains(cmd)) {
            std::cout << "Unknown command: " << cmd << '\n';
            return;
        }

        if (cmd == "help") {
            std::cout << "Available commands:";
            for (const auto& entry : commands) {
                std::cout << ' ' << entry;
            }
            std::cout << '\n';
        } else {
            std::cout << "Executing \"" << cmd << "\"...\n";
        }
    };

    dispatch("status");
    dispatch("reload");
    dispatch("shutdown");
    dispatch("reboot");

    return 0;
}